#pragma once

#include <vector>
#include "../Utilities/utilities.h"
#include "Defines.h"

typedef struct
{
	int			type;
	Vector3		position;
	Vector4		ambient;
	Vector4		diffuse;
	Vector4		specular;
	float		constantAttenuation;
	float		linearAttenuation;
	float		quadraticAttenuation;
	float		shininess;
	float		weight;
} Light;

typedef struct
{
	float		maxHeight;
	float		fogStart;
	float		fogLength;
	Vector4		fogColor;
} Terrain;

class cObject;

class cSceneManager
{
protected:
	static cSceneManager	*ms_Instance;
	std::vector<cObject*>	m_vObjects;

	cSceneManager():m_vObjects(), m_light(), m_terrain() { }
	cSceneManager(const cSceneManager &) { }
	cSceneManager& operator =(const cSceneManager &) { }
	virtual ~cSceneManager();

public:
	Light		m_light;
	Terrain		m_terrain;

	static cSceneManager* GetInstance();
	static void DestroyInstance();

	void LoadScene(const char *file_url);
	void Init();
	void Update(float deltaTime);
	void Render();
};
